Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

168
Vistas
la función getControl("Subgrid").addOnLoad se ejecuta dos veces cuando se crea el registro principal por primera vez

Hola, hice una función que detecta si agregué o eliminé una nueva fila en mi subcuadrícula y ejecuté algunos coce de acuerdo con eso

Normalmente funciona bien en un registro principal existente a menos que cree un nuevo registro principal, presiono guardar, luego agrego una fila en mi subcuadrícula y mi función se ejecuta dos veces por alguna razón

¿Alguien sabe por qué mi código se ejecuta dos veces solo cuando creo un nuevo registro principal, la función está en onLoad incluso?

Tomé el código principal de aquí: (la función dosomething se dispara dos veces)

 function onLoad() { var funtionName = "onLoad"; try { setTimeout(function () { if (Xrm.Page != null && Xrm.Page != undefined && Xrm.Page.getControl("contact_subgrid") != null && Xrm.Page.getControl("contact_subgrid") != undefined) { _rowCount = Xrm.Page.getControl("subgrid").getGrid().getTotalRecordCount(); Xrm.Page.getControl("subgrid").addOnLoad(onGridLoad); } }, 5000); } catch (e) { Xrm.Utility.alertDialog(functionName + "Error: " + (e.message || e.description)); } } function onGridLoad() { var functionName = " onGridLoad "; var currentRowCount = null; try { setTimeout(function () { if (Xrm.Page != null && Xrm.Page != undefined && Xrm.Page.getControl("contact_subgrid") != null && Xrm.Page.getControl("contact_subgrid") != undefined) { currentRowCount = Xrm.Page.getControl("subgrid").getGrid().getTotalRecordCount(); if (currentRowCount > _rowCount) { dosomething(); _rowCount = currentRowCount; } else if (currentRowCount < _rowCount) { dosomethingelse(); _rowCount = currentRowCount; } } }, 2000); } catch (e) { Xrm.Utility.alertDialog(functionName + "Error: " + (e.message || e.description)); } }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Su código usa el objeto Xrm.Page , que está obsoleto en Dynamics 365 CE Online/Dataverse. Debe usar la nueva API; consulte Referencia de la API del cliente - MS Docs .

Su función se llama dos veces, porque el sistema llama dos veces a la función onLoad : primero cuando el formulario se abre en el modo "Crear", segundo cuando se guardan los datos en el formulario. Una vez que se han guardado los datos, la página del formulario no se vuelve a cargar, pero, sin embargo, se vuelve a llamar a la función onLoad del formulario. Esto hace que su secuencia de comandos adjunte un segundo controlador onLoad.

Prueba este código. Se basa en la API de script moderna. Asegúrese de que su formulario pase el contexto del formulario a la función onLoad :

 function onLoad(c) { const formContext = c.getFormContext(); const subGrid = formContext.getControl("subgrid"); const contactSubGrid = formContext.getControl("contact_subgrid"); if (subGrid === null || contactSubGrid === null) return; try { setTimeout(() => { let rowCount = subGrid.getGrid().getTotalRecordCount(); subGrid.addOnLoad(controlContext => { setTimeout(() => { let currentRowCount = subGrid.getGrid().getTotalRecordCount(); try { if (currentRowCount > rowCount) { // do something } else if (currentRowCount < rowCount) { // do something else } rowCount = currentRowCount; } catch (e) { Xrm.Navigation.openErrorDialog({ message: e.message, errorCode: e.errorCode }); } }, 2000); }); }, 5000); } catch (e) { Xrm.Navigation.openErrorDialog({ message: e.message, errorCode: e.errorCode }); } }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda